package com.max.base.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import tk.mybatis.mapper.common.Mapper;

public abstract class BaseService<T> implements IBaseService<T> {

	/**
	 * 数据层接口
	 */
	@Autowired
	private Mapper<T> mapper;

	public Mapper<T> getMapper() {
		return mapper;
	}

	/**
	 * 根据主键获取对象
	 * 
	 * @param key
	 *            含有主键的实体对象
	 * @return 查询的对象
	 */
	public T selectByKey(Object key) {
		return mapper.selectByPrimaryKey(key);
	}

	/**
	 * 保存方法
	 * 
	 * @param entity
	 *            需要保存的实体对象
	 * @return 0失败 or 1成功
	 */
	public int save(T entity) {
		return mapper.insert(entity);
	}

	/**
	 * 保存对象中非空数据
	 * 
	 * @param entity
	 *            需要保存的实体对象
	 * @return 0失败 or 1成功
	 */
	public int saveNotNull(T entity) {
		return mapper.insertSelective(entity);
	}

	/**
	 * 删除方法
	 * 
	 * @param key
	 *            含有主键的实体对象
	 * @return 0失败 or 1成功
	 */
	public int delete(Object key) {
		return mapper.deleteByPrimaryKey(key);
	}

	/**
	 * 全部更新方法
	 * 
	 * @param entity
	 *            实体对象
	 * @return 0失败 or 1成功
	 */
	public int updateAll(T entity) {
		return mapper.updateByPrimaryKey(entity);
	}

	/**
	 * 更新对象中非空数据
	 * 
	 * @param entity
	 *            实体对象
	 * @return 0失败 or 1成功
	 */
	public int updateNotNull(T entity) {
		return mapper.updateByPrimaryKeySelective(entity);
	}

	/**
	 * 查询数据集合方法
	 * 
	 * @param example
	 *            实体对象
	 * @return 数据集合
	 */
	public List<T> selectByExample(Object example) {
		return mapper.selectByExample(example);
	}

}
